#1. 九九乘法表

print('for in循环下的九九乘法表')
#for in 循环
#左正三角
for j in range(1,10):
    for i in range(1,j+1):
        print('{}*{}={:<4}'.format(i,j,i*j),end='')
    print()
print('='*80)

#左倒三角
for j in range(9,0,-1):
    for i in range(1,j+1):
        print('{}*{}={:<4}'.format(i,j,i*j),end='')
    print()
print('='*80)

#右正三角
for j in range(1,10):
    #首先每行先输入9-j个空白字符，字符长度与'i*j='保持一致
    #例如，第1行，要实现1*1=1右对齐，需要8个空白字符；第9行时则不需要
    #k在range(1,9)，则表示需要从1循环到8，输入8个空白字符
    for k in range(1,10-j):
        print(end='        ')
    #i从大到小
    for i in range(j,0,-1):
        print('{}*{}={:<4}'.format(i,j,i*j),end='')
    print('')
print('='*80)

#右倒三角
for j in range(9,0,-1):
    #第1行j值为9，没有空白字符，第9行j值为1，输入8个空白字符
    for k in range(1,10-j):
        print(end='        ')
    #i从大到小
    for i in range(j,0,-1):
        print('{}*{}={:<4}'.format(i,j,i*j),end='')
    print('')
print('')    

print('while循环下的九九乘法表')
#while 循环
#左正三角
j=1
while j<10:
    i=1
    while i<=j:
        print('{}*{}={:<4}'.format(i,j,i*j),end='')
        i+=1
    print()
    j+=1
print(('='*80))

#左倒三角
j=9
while j>=1:
    i=1
    while i<=j:
        print('{}*{}={:<4}'.format(i,j,i*j),end='')
        i+=1
    print()
    j-=1
print('='*80)

#右正三角
j=1
while j<10:
    k=1
    while k<10-j:#第1行输入8个空白字符，第9行输入0个，9-j的关系
        print(end='        ')
        k+=1#表示循环输出空白字符到第9-j个
    i=j
    while i>=1:
        print('{}*{}={:<4}'.format(i,j,i*j),end='')
        i-=1
    print('')
    j+=1
print('='*80)

#右倒三角
j=9
while j>0:
    k=1
    while k<10-j:
        print(end='        ')
        k+=1
    i=j
    while i>0:
        print('{}*{}={:<4}'.format(i,j,i*j),end='')
        i-=1
    print('')
    j-=1
print('='*80)
print('')


#2. 统计指定目录大小

print('统计目录大小')
import os#导入os系统模块
print('当前路径为：{}'.format(os.getcwd()))#当前路径

sum=0#初始大小设置

def calsize(dir):#文件大小统计函数calsize
    dlist=os.listdir(dir)#读取文件夹中的文件
    for f in dlist:#遍历文件
        files=os.path.join(dir,f)#拼装路径
        if os.path.isfile(files):#若为文件，直接统计大小
            getsize=os.path.getsize(files)#os.path.getsize统计拼装完路径后的文件大小
            global sum#全局适用
            sum+=getsize#调整sum变量
        if os.path.isdir(files):#若为文件夹，自我调用calsize函数
            calsize(files)
            
calsize('./')#对当前目录执行大小统计函数操作
print('当前文件夹大小为{}字节'.format(sum))#输出结果
print('')
'''
注：若要当前目录中某个指定子目录进行大小统计，则在calsize()函数中输入指定子目录
例如：calsize('./bb')
'''

#3. ATM操作系统
#定义一个存放账号信息的列表变量
user_list=[
    {'name':'肥蟒宝宝','account':'0000000000','password':'261220','balance':50000},
    {'name':'肥蟒蟒','account':'1111111111','password':'920819','balance':30000},
    {'name':'死胖子啵啵','account':'2222222222','password':'671223','balance':80000}]

#定义账号密码验证函数
def check(myaccount,mypassword):
    for i in range(len(user_list)):#遍历列表信息，user_list[][]表示列表中第几个的account/password
        if myaccount == user_list[i]['account']and mypassword == user_list[i]['password']:
            return i#返回，不主动输出，后调用

#初始界面函数，展示初始界面
def ATM():
    print('='*14,'宝宝银行','='*14)
    print('')
    print('{:^40}'.format('ATM'))
    print('')
    print('='*14,'宝宝银行','='*14)
    print('')

#账户界面函数，展示基本操作选项
def frontpage():
    print('='*13,'用户操作界面','='*13)
    print('')
    print('{:3}{:<10} {:<10} {:<10}'.format('','1.查询','2.取款','3.存款'))
    print('')
    print('{:3}{:<8} {:<10}'.format('','4.修改密码','5.退出'))
    print('')
    print('='*40)
    
#账户信息查看函数
def showaccount(user_id):
    print('='*13,'用户查询界面','='*13)
    print('')
    print('{:^30}'.format('～(￣▽￣～)(～￣▽￣)～'))
    #用chr(12288)解决中文字符对齐占位问题
    print('|{0:{3}<6}|{1:{3}<6}|{2:{3}<6}|'.format('账户名','银行卡号','余额(元)',chr(12288)))
    print('-'*40)
    print('|{0:{3}<6}|{1:<12}|{2:<10}|'.format(user_list[user_id]['name'],user_list[user_id]['account'],user_list[user_id]['balance'],chr(12288)))
    print('')
    print('='*40)

#账户取款函数
def withdrawl(user_id):
    print('='*13,'用户取款界面','='*13)
    print('')
    dele=input('请输入取款金额(元)：')
    print('')
    if int(dele)>user_list[user_id]['balance']:#取款不可超过可用余额
        print('取款数额超出账目数额！死肥蟒ԅ(¯﹃¯ԅ)')
        print('')
        print('请看清楚您的余额！(＠￣ー￣＠)')
        print('')
        input('请按任意键查看')
        showaccount(user_id)
    else:
        user_list[user_id]['balance']-=int(dele)
        print('取款完成！桑心吗(；′⌒`)')
        print('')
        showaccount(user_id)

#账户存款函数，操作同取款函数
def deposit(user_id):
    print('='*13,'用户存款界面','='*13)
    print('')
    add=input('请输入存款金额(元)：')
    print('')
    print('存款完成！开心吗<(￣︶￣)>')
    print('')
    user_list[user_id]['balance']+=int(add)
    showaccount(user_id)
    
#更改密码函数
def change(user_id):
    error=0
    while True:
        print('='*13,'更改密码界面','='*13)
        print('')
        old=input('请输入旧密码：')
        print('')
        if old==user_list[user_id]['password']:
            new1=input('请输入新密码：')
            print('')
            new2=input('请再次输入新密码：')
            print('')
            if new1==new2:#更改密码需要两次输入同样的新密码
                print('密码更改完成！o(≧∇≦)ﾉ')
                user_list[user_id]['password']=new1
                print('')
                return
                break
            else:
                print('两次输入密码不一致！(⊙﹏⊙)')
                print('')
        else:
            if error<2:
                print('密码输入错误！(*￣︿￣)你是不是蒙进来的！')
                print('')
                error+=1
                print('错误次数：{}'.format(error))
                print('')
            else:
                print('错啦错啦！肥蟒蠕动！_*( ￣皿￣)/#_')
                print('')
                break
            
chance=2    
while True:
    ATM()
    #账号密码环节
    myaccount=input('请输入您的银行卡卡号：')#键入值默认格式为字符，故列表中的账号密码用字符格式表示
    mypassword=input('请输入您的银行卡密码：')
    user_id=check(myaccount,mypassword)#调用账号密码验证函数，并给user_id赋值
    if user_id !=None:#账号密码与任一账户信息匹配，
        print('')
        print('登陆成功！')
        print('')
        while True:
            frontpage()
            print('')
            choice=input('请输入操作选项：')
            print('')
            if choice=='1':
                showaccount(user_id)#调用账户信息查看函数
                print('')
                input('按任意键返回上级目录：')
                print('')
            elif choice=='2':
                withdrawl(user_id)#调用取款函数
                print('')
                input('按任意键返回上级目录：')
                print('')
            elif choice=='3':
                deposit(user_id)#调用存款函数
                print('')
                input('按任意键返回上级目录：')
                print('')
            elif choice=='4':
                change(user_id)#调用更改密码函数                 
            elif choice=='5':
                print('宝宝要吃东西啦！ヾ(￣▽￣)Bye~Bye~！')
                print('')
                break#退出循环
            else:
                print('无效的输入！')
                print('')
    else:#账号密码不匹配，重新输入
        if chance>0:
            print('')
            print('账号或密码错误，您还有{}次机会，请重新输入！'.format(chance))
            print('')
            chance-=1
        else:
            print('对不起，您输入账号或密码错误已达3次！')
            break#错误次数到达三次，退出循环（系统）



          
